From: Debarshi Ray Date: Wed, 8 Aug 2012 20:48:17 +0000 (+0200) Subject: messageTray: Clone, clip & move the window_group when tray is toggled X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~6158 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=16bbe9782b9c62a1340750966468e1c4d1517c49;p=gnome-shell.git messageTray: Clone, clip & move the window_group when tray is toggled 1) straddling windows get clipped at the monitor boundary 2) we move the bottom monitor and not the primary because that is where the tray is 3) to stop the wallpaper from the bottom monitor leaking into the primary, we adjust the clip as the clone animates up/down https://bugzilla.gnome.org/show_bug.cgi?id=681392 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index e135506a5..0ff4710c5 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -1577,6 +1577,7 @@ const MessageTray = new Lang.Class({ this._notificationRemoved = false; this._reNotifyAfterHideNotification = null; this._inFullscreen = false; + this._desktopClone = null; this._corner = new Clutter.Rectangle({ width: 1, height: 1, @@ -2291,6 +2292,35 @@ const MessageTray = new Lang.Class({ time: ANIMATION_TIME, transition: 'easeOutQuad' }); + + // Don't move the windows up if we are in the overview. + if (this._overviewVisible) + return; + + let bottomMonitor = Main.layoutManager.bottomMonitor; + let geometry = new Clutter.Geometry({ x: bottomMonitor.x, + y: bottomMonitor.y, + width: bottomMonitor.width, + height: bottomMonitor.height + }); + this._desktopClone = new Clutter.Clone({ source: global.window_group, clip: geometry }); + Main.uiGroup.insert_child_above(this._desktopClone, global.window_group); + this._desktopClone.x = 0; + this._desktopClone.y = 0; + this._desktopClone.show(); + + Tweener.addTween(this._desktopClone, + { y: this._desktopClone.y - this.actor.height, + time: ANIMATION_TIME, + transition: 'easeOutQuad', + onUpdate: Lang.bind(this, function() { + let progress = -1 * this._desktopClone.y; // y is negative + this._desktopClone.set_clip(geometry.x, + geometry.y + progress, + geometry.width, + geometry.height - progress); + }) + }); }, _hideTray: function() { @@ -2299,6 +2329,27 @@ const MessageTray = new Lang.Class({ time: ANIMATION_TIME, transition: 'easeOutQuad' }); + + if (!this._desktopClone) + return; + + let geometry = this._desktopClone.clip; + Tweener.addTween(this._desktopClone, + { y: this._desktopClone.y + this.actor.height, + time: ANIMATION_TIME, + transition: 'easeOutQuad', + onComplete: Lang.bind(this, function() { + this._desktopClone.destroy(); + this._desktopClone = null; + }), + onUpdate: Lang.bind(this, function() { + let progress = this.actor.height + this._desktopClone.y; // y is negative + this._desktopClone.set_clip(geometry.x, + geometry.y - progress, + geometry.width, + geometry.height + progress); + }) + }); }, _onIdleMonitorWatch: function(monitor, id, userBecameIdle) {